/*
 * @Description: 提交校验-数据字典配置
 * @Autor: gufuyan
 * @Date: 2021-11-15 11:39:01
 * @lastModifiedBy: gufuyan
 * @LastEditTime: 2021-12-03 15:44:46
 * @lastModifiedContent:
 */

import type { FnTreeT } from './data';
import { formulaData } from './formula';

export const componentTip = {
  input: '文本',
  radio: '单选',
  checkbox: '复选',
  select: '下拉',
  datePicker: '日期',
  dateRange: '日期范围',
  subForm: '子表单',
};

// 函数基础数据 tree
export const fnDataTree1: FnTreeT[] = [
  {
    key: 'frequently',
    title: '常用函数',
    children: [
      {
        key: 'frequently-CONCATENATE',
        title: 'CONCATENATE',
        desc: `DATE函数可以将时间戳转换为日期对象
      用法：DATE(时间戳)
      示例：略`,
      },
      {
        key: 'frequently-DATE',
        title: 'DATE',
        desc: ` DATE函数可以将时间戳转换为日期对象
        用法：DATE(时间戳)
        示例：略`,
      },
      {
        key: 'frequently-DATEDIF',
        title: 'DATEDIF',
        desc: `DATEDIF函数可以计算两个日期时间相差的年数、月数、天数、小时数、分钟数、秒数。
        用法：DATEDIF(开始时间,结束时间,[单位])，单位可以是 "y" 、"M"、"d"、"h"、"m"、"s"
        示例：DATEDIF(下单时间,付款时间,"h")，如果下单时间是9:00，付款时间为当天10:30，计算得到的小时差为1.5。`,
      },
      {
        key: 'frequently-IF',
        title: 'IF',
        desc: `IF函数判断一个条件能否满足；如果满足返回一个值，如果不满足则返回另外一个值
        用法：IF(逻辑表达式,为true时返回的值,为false时返回的值)
        示例：IF(语文成绩>60,"及格","不及格")，当语文成绩>60时返回及格，否则返回不及格。`,
      },
      {
        key: 'frequently-SUM',
        title: 'SUM',
        desc: `SUM函数可以获取一组数值的总和
        用法：SUM(数字1,数字2,...)
        示例：SUM(语文成绩,数学成绩, 英语成绩)返回三门课程的总分`,
      },
    ],
  },
  {
    key: 'math',
    title: '数学函数',
    children: [
      {
        key: 'math-ABS',
        title: 'ABS',
        desc: `ABS函数可以获取一个数的绝对值
      用法：ABS(数字)
      示例：ABS(-8)可以返回8，也就是-8的绝对值`,
      },
      {
        key: 'math-AVERAGE',
        title: 'AVERAGE',
        desc: `AVERAGE函数可以获取一组数值的算术平均值
      用法：AVERAGE(数字1,数字2,...)
      示例：AVERAGE(语文成绩,数学成绩, 英语成绩)返回三门课程的平均分`,
      },
      {
        key: 'math-CEILING',
        title: 'CEILING',
        desc: `CEILING函数可以将数字增大到最接近原值的指定因数的倍数
      用法：CEILING(数字,因数)
      示例：CEILING(7,6)返回12，因为12比7大的同时，也是6的倍数中最接近7的数字`,
      },
      {
        key: 'math-COUNT',
        title: 'COUNT',
        desc: `COUNT函数可以获取参数的数量
      用法：COUNT(值,值,...)
      示例：COUNT(小明,小王,小张,小李)返回4，也就是人员的数量`,
      },
      {
        key: 'math-COUNTIF',
        title: 'COUNTIF',
        desc: `COUNTIF函数可以获取数组中满足条件的参数个数
      用法：COUNTIF(数组,"条件")
      示例：COUNTIF(子表单.性别, "女")，可得到子表单中性别填的是"女"的数据条数；COUNTIF([1,2,3,4],">2")，可得到1,2,3,4中大于2的数字数量，结果为2。`,
      },
      {
        key: 'math-FIXED',
        title: 'FIXED',
        desc: `FIXED函数可将数字舍入到指定的小数位数并输出为文本
      用法：FIXED(数字,小数位数)
      示例：FIXED(3.1415,2)返回"3.14"`,
      },
      {
        key: 'math-FLOOR',
        title: 'FLOOR',
        desc: `FLOOR函数可将数字减小到最接近原值的指定因数的倍数
      用法：FLOOR(数字,因数)
      示例：FLOOR(7,6)返回6，因为6比7小的同时，也是6的倍数中最接近7的数字`,
      },
      // 待补全
    ],
  },
  {
    key: 'text',
    title: '文本函数',
    children: [
      {
        key: 'text-CONCATENATE',
        title: 'CONCATENATE',
        desc: `CONCATENATE函数可以将多个文本合并成一个文本
        用法：CONCATENATE(文本1,文本2,...)
        示例：CONCATENATE("三年二班","周杰伦")会返回"三年二班周杰伦"`,
      },
      {
        key: 'text-CHAR',
        title: 'CHAR',
        desc: `CHAR函数可以将计算机字符集的数字代码转换为对应字符
        用法：CHAR(数字)
        示例：CHAR(10)会返回换行字符`,
      },
      {
        key: 'text-EXACT',
        title: 'EXACT',
        desc: `EXACT函数可以比较两个文本是否完全相同，完全相同则返回true，否则返回false
        用法：EXACT(文本1, 文本2)
        示例：EXACT(手机号,中奖手机号)，如果两者相同，返回true，如果不相同，返回false`,
      },
      {
        key: 'text-IP',
        title: 'IP',
        desc: `IP函数可以获取当前用户的ip地址
        用法：IP()
        示例：略`,
      },
      {
        key: 'text-ISEMPTY',
        title: 'ISEMPTY',
        desc: `ISEMPTY函数可以用来判断值是否为空文本、空对象或者空数组
        用法：ISEMPTY(文本)
        示例：略`,
      },
      // 待补全
    ],
  },
  {
    key: 'date',
    title: '日期函数',
    children: [
      {
        key: 'date-DATE',
        title: 'DATE',
        desc: `DATE函数可以将时间戳转换为日期对象
        用法：DATE(时间戳)
        示例：略`,
      },
      {
        key: 'date-DATEDELTA',
        title: 'DATEDELTA',
        desc: `DATEDELTA函数可以将指定日期加/减指定天数
        用法：DATEDELTA(指定日期,需要加减的天数)
        示例：略`,
      },
      // 待补全
    ],
  },
  {
    key: 'logic',
    title: '逻辑函数',
    children: [
      {
        key: 'logic-AND',
        title: 'AND',
        desc: `如果所有参数都为真，AND函数返回布尔值true，否则返回布尔值 false
        用法：AND(逻辑表达式1,逻辑表达式2,...)
        示例：AND(语文成绩>90,数学成绩>90,英语成绩>90)，如果三门课成绩都> 90，返回true，否则返回false`,
      },
      {
        key: 'logic-FALSE',
        title: 'FALSE',
        desc: `FALSE函数返回布尔值false
        用法：FALSE()
        示例：略`,
      },
      // 待补全
    ],
  },
  {
    key: 'advanced',
    title: '高级函数',
    children: [
      {
        key: 'advanced-DISTANCE',
        title: 'DISTANCE',
        desc: `DISTANCE函数可以返回两个位置间的直线距离，单位m(米)。
        用法：DISTANCE(位置1, 位置2)
        示例：DISTANCE(位置1, 位置2)，返回两个定位位置间的距离，如23000。`,
      },
      {
        key: 'advanced-GETUSERNAME',
        title: 'GETUSERNAME',
        desc: `GETUSERNAME函数可以获取当前用户的昵称
        用法：GETUSERNAME()
        示例：略`,
      },
      // 待补全
    ],
  },
];

export const fnDataTree = formulaData;

// 函数清单 list
const renderTreeToList = (data: any[]) => {
  const list: { key: string; title: string }[] = [];
  data.forEach((el) => {
    list.push({
      key: el.key,
      title: el.title,
    });
    el.children.forEach((element: any) => {
      list.push({
        ...element,
      });
    });
  });
  return list;
};
export const fnDataList = renderTreeToList(fnDataTree);

export const defaultDesc: any = {
  key: 'frequently-IF',
  title: 'IF',
  intro: 'formula.if.intro',
  usage: 'formula.if.usage',
  example: 'formula.if.example',
  docUrl: 'https://hc.jiandaoyun.com/doc/9033',
};
